package com.sunrise.comunicacao.servico;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.annotation.Resource;

import lombok.Getter;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sunrise.comunicacao.repositorio.iface.ContaSmsDao;
import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.generico.entidade.ContaSms;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.visao.Filtro;

@Service
@Transactional(readOnly = true)
public class ManterContaSmsService {

	@Resource(name = "contaSmsDaoImpl")
	@Getter
	private ContaSmsDao contaSmsDAO;
	
	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDAO;

	public Collection<ContaSms> buscarPorFiltros(Filtro contaSms){
		Collection<ContaSms>  contas = getContaSmsDAO().buscarPorFiltros(contaSms);
		for(ContaSms conta : contas){
			conta.getUsuarios().size();
		}
		return contas;
	}
	
	public Collection<Usuario> adicionarUsuariosSelecionados(Usuario[] usuariosSelecionados, ContaSms contaSms) {
		Collection<Usuario> usuarios = new ArrayList<Usuario>();
		for (Usuario user : usuariosSelecionados) {
			Boolean inserido = false;
			if (!contaSms.getUsuarios().isEmpty()) {
				for (Usuario usuario : contaSms.getUsuarios()) {
					if (usuario.getId().equals(user.getId())) {
						inserido = true;
					}
				}
			}
			if (!inserido) {
				usuarios.add(user);
			}
		}

		return usuarios;
	}
	
	public Collection<Usuario> listarUsuarioPorNome(String nome) {
		return getUsuarioDAO().listarPorNome(nome);
	}

	public List<Usuario> listarUsuariosPorFiltro(Filtro filtro) {
		return getUsuarioDAO().buscarPorFiltros(filtro);
	}

	@Transactional(readOnly = false)
	public void inserir(ContaSms entidade) {
		if(entidade.getUsuarios() != null && entidade.getUsuarios().isEmpty()){
			entidade.setUsuarios(null);
		}
		getContaSmsDAO().inserir(entidade);
	}

	@Transactional(readOnly = false)
	public void alterar(ContaSms entidade) {
		getContaSmsDAO().alterar(entidade);

	}

	public String validarCampoUnico(ContaSms entidade) {
		ContaSms conta = getContaSmsDAO().buscarPorNome(entidade.getNome());
		if(conta != null){
			if(entidade.getId() == null || !conta.getId().equals(entidade.getId())){
				return MessagesUtil.getMessageKey("campoNomeExistente");
			}
		}
		
		conta = getContaSmsDAO().buscarPorUsername(entidade.getUsername());
		if(conta != null){
			if(entidade.getId() == null || !conta.getId().equals(entidade.getId())){
				return MessagesUtil.getMessageKey("campoUsernameExistente");
			}
		}
		
		return null;
	}
	
}